package com.itany.cloud.service;

import com.itany.cloud.util.ResponseResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.*;

// 通过@FeignClient注解表示当前客户端访问哪一个服务提供者
// value属性指定微服务名,表示访问该微服务所提供的功能
// 例如:此处指定了cloud-nacos-provider,则表示访问这个微服务的功能
// 此时的微服务指向的是对应服务的协议名、域名与端口,访问具体功能需要具体指定
// 此处相当于http://localhost:9001
@Service
@FeignClient(value = "cloud-nacos-provider")
public interface UserServiceClient {

    // 由于微服务只指向到端口号
    // 而具体功能还需要指定访问命令
    // 因此,在对应接口中需要指定端口后面的访问命令
    // 最终访问的资源为微服务地址+访问命令
    @GetMapping("/users")
    ResponseResult findAll();

    @GetMapping("/users/{id}")
    ResponseResult findById(@PathVariable("id") Integer id);

    // 在OpenFeign的开发中,所有Handler默认行为全部失效
    // 即:所有注解必须手动添加,不会自动添加注解
    // 所有参数不能直接使用对象,而是必须使用请求所需要的所有参数
    @PostMapping("/users")
    ResponseResult addUser(@RequestParam("username") String username, @RequestParam("password") String password);

    @DeleteMapping("/users/{id}")
    ResponseResult deleteUser(@PathVariable("id") Integer id);

    @PutMapping("/users")
    ResponseResult modifyUser(@RequestParam("id") Integer id, @RequestParam("username") String username, @RequestParam("password") String password);
}
